<!DOCTYPE html>
<html lang="fa" class="no-js">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />

    <meta
      name="description"
      content="کتابخانه‌ای پایتونی برای پردازش زبان فارسی"
    />

    <meta name="author" content="روشن" />

    <link
      rel="canonical"
      href="https://www.roshan-ai.ir/hazm/docs/content/samples/keyword_extraction.html"
    />

    <link rel="prev" href="index.html" />

    <link rel="next" href="../in-other-languages.html" />

    <link rel="icon" href="../../assets/favicon.png" />
    <meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.2.6" />

    <title>استخراج کلمات کلیدی - هضم | کتابخانهٔ پردازش زبان فارسی</title>

    <link
      rel="stylesheet"
      href="../../assets/stylesheets/main.0e669242.min.css"
    />

    <link
      rel="stylesheet"
      href="../../assets/stylesheets/palette.85d0ee34.min.css"
    />

    <script src="https://unpkg.com/iframe-worker/shim"></script>

    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      rel="stylesheet"
      href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CFira+Code:400,400i,700,700i&display=fallback"
    />
    <style>
      :root {
        --md-text-font: "Roboto";
        --md-code-font: "Fira Code";
      }
    </style>

    <link rel="stylesheet" href="../../assets/_mkdocstrings.css" />

    <link rel="stylesheet" href="../../hint.min.css" />

    <link rel="stylesheet" href="../../custom-style.css" />

    <script>
      (__md_scope = new URL("../..", location)),
        (__md_hash = (e) =>
          [...e].reduce((e, _) => (e << 5) - e + _.charCodeAt(0), 0)),
        (__md_get = (e, _ = localStorage, t = __md_scope) =>
          JSON.parse(_.getItem(t.pathname + "." + e))),
        (__md_set = (e, _, t = localStorage, a = __md_scope) => {
          try {
            t.setItem(a.pathname + "." + e, JSON.stringify(_));
          } catch (e) {}
        });
    </script>

    <script id="__analytics">
      function __md_analytics() {
        function n() {
          dataLayer.push(arguments);
        }
        (window.dataLayer = window.dataLayer || []),
          n("js", new Date()),
          n("config", "G-D32414H137"),
          document.addEventListener("DOMContentLoaded", function () {
            document.forms.search &&
              document.forms.search.query.addEventListener("blur", function () {
                this.value && n("event", "search", { search_term: this.value });
              }),
              document$.subscribe(function () {
                var a = document.forms.feedback;
                if (void 0 !== a)
                  for (var e of a.querySelectorAll("[type=submit]"))
                    e.addEventListener("click", function (e) {
                      e.preventDefault();
                      var t = document.location.pathname,
                        e = this.getAttribute("data-md-value");
                      n("event", "feedback", { page: t, data: e }),
                        (a.firstElementChild.disabled = !0);
                      e = a.querySelector(
                        ".md-feedback__note [data-md-value='" + e + "']"
                      );
                      e && (e.hidden = !1);
                    }),
                      (a.hidden = !1);
              }),
              location$.subscribe(function (e) {
                n("config", "G-D32414H137", { page_path: e.pathname });
              });
          });
        var e = document.createElement("script");
        (e.async = !0),
          (e.src = "https://www.googletagmanager.com/gtag/js?id=G-D32414H137"),
          document
            .getElementById("__analytics")
            .insertAdjacentElement("afterEnd", e);
      }
    </script>

    <script>
      var consent;
      "undefined" == typeof __md_analytics ||
        ((consent = __md_get("__consent")) &&
          consent.analytics &&
          __md_analytics());
    </script>

    <link href="../../assets/stylesheets/glightbox.min.css" rel="stylesheet" />
    <style>
      html.glightbox-open {
        overflow: initial;
        height: 100%;
      }
      .gslide-title {
        margin-top: 0px;
        user-select: text;
      }
      .gslide-desc {
        color: #666;
        user-select: text;
      }
      .gslide-image img {
        background: white;
      }

      .gscrollbar-fixer {
        padding-right: 15px;
      }
      .gdesc-inner {
        font-size: 0.75rem;
      }
      body[data-md-color-scheme="slate"] .gdesc-inner {
        background: var(--md-default-bg-color);
      }
      body[data-md-color-scheme="slate"] .gslide-title {
        color: var(--md-default-fg-color);
      }
      body[data-md-color-scheme="slate"] .gslide-desc {
        color: var(--md-default-fg-color);
      }
    </style>
    <script src="../../assets/javascripts/glightbox.min.js"></script>
  </head>

  <body
    dir="rtl"
    data-md-color-scheme="default"
    data-md-color-primary="indigo"
    data-md-color-accent="indigo"
  >
    <script>
      var palette = __md_get("__palette");
      if (palette && "object" == typeof palette.color)
        for (var key of Object.keys(palette.color))
          document.body.setAttribute(
            "data-md-color-" + key,
            palette.color[key]
          );
    </script>

    <input
      class="md-toggle"
      data-md-toggle="drawer"
      type="checkbox"
      id="__drawer"
      autocomplete="off"
    />
    <input
      class="md-toggle"
      data-md-toggle="search"
      type="checkbox"
      id="__search"
      autocomplete="off"
    />
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      <a href="#_1" class="md-skip"> پرش به محتویات </a>
    </div>
    <div data-md-component="announce"></div>

    <header
      class="md-header md-header--shadow md-header--lifted"
      data-md-component="header"
    >
      <nav class="md-header__inner md-grid" aria-label="سرتیتر">
        <a
          href="../../index.html"
          title="هضم | کتابخانهٔ پردازش زبان فارسی"
          class="md-header__button md-logo"
          aria-label="هضم | کتابخانهٔ پردازش زبان فارسی"
          data-md-component="logo"
        >
          <img src="../../assets/logo.svg" alt="logo" />
        </a>
        <label class="md-header__button md-icon" for="__drawer">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
            <path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z" />
          </svg>
        </label>
        <div class="md-header__title" data-md-component="header-title">
          <div class="md-header__ellipsis">
            <div class="md-header__topic">
              <span class="md-ellipsis">
                هضم | کتابخانهٔ پردازش زبان فارسی
              </span>
            </div>
            <div class="md-header__topic" data-md-component="header-topic">
              <span class="md-ellipsis"> استخراج کلمات کلیدی </span>
            </div>
          </div>
        </div>

        <form class="md-header__option" data-md-component="palette">
          <input
            class="md-option"
            data-md-color-media=""
            data-md-color-scheme="default"
            data-md-color-primary="indigo"
            data-md-color-accent="indigo"
            aria-label="تغییر به حالت شب"
            type="radio"
            name="__palette"
            id="__palette_1"
          />

          <label
            class="md-header__button md-icon"
            title="تغییر به حالت شب"
            for="__palette_2"
            hidden
          >
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path
                d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"
              />
            </svg>
          </label>

          <input
            class="md-option"
            data-md-color-media=""
            data-md-color-scheme="slate"
            data-md-color-primary="indigo"
            data-md-color-accent="indigo"
            aria-label="تغییر به حالت روز"
            type="radio"
            name="__palette"
            id="__palette_2"
          />

          <label
            class="md-header__button md-icon"
            title="تغییر به حالت روز"
            for="__palette_1"
            hidden
          >
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path
                d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"
              />
            </svg>
          </label>
        </form>

        <label class="md-header__button md-icon" for="__search">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
            <path
              d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"
            />
          </svg>
        </label>
        <div class="md-search" data-md-component="search" role="dialog">
          <label class="md-search__overlay" for="__search"></label>
          <div class="md-search__inner" role="search">
            <form class="md-search__form" name="search">
              <input
                type="text"
                class="md-search__input"
                name="query"
                aria-label="جستجو"
                placeholder="جستجو"
                autocapitalize="off"
                autocorrect="off"
                autocomplete="off"
                spellcheck="false"
                data-md-component="search-query"
                required
              />
              <label class="md-search__icon md-icon" for="__search">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                  <path
                    d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"
                  />
                </svg>

                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                  <path
                    d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"
                  />
                </svg>
              </label>
              <nav class="md-search__options" aria-label="جستجو">
                <a
                  href="javascript:void(0)"
                  class="md-search__icon md-icon"
                  title="هم‌رسانی"
                  aria-label="هم‌رسانی"
                  data-clipboard
                  data-clipboard-text=""
                  data-md-component="search-share"
                  tabindex="-1"
                >
                  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                    <path
                      d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"
                    />
                  </svg>
                </a>

                <button
                  type="reset"
                  class="md-search__icon md-icon"
                  title="بازنشانی"
                  aria-label="بازنشانی"
                  tabindex="-1"
                >
                  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                    <path
                      d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"
                    />
                  </svg>
                </button>
              </nav>

              <div
                class="md-search__suggest"
                data-md-component="search-suggest"
              ></div>
            </form>
            <div class="md-search__output">
              <div class="md-search__scrollwrap" data-md-scrollfix>
                <div class="md-search-result" data-md-component="search-result">
                  <div class="md-search-result__meta">راه‌اندازی جستجو</div>
                  <ol class="md-search-result__list" role="presentation"></ol>
                </div>
              </div>
            </div>
          </div>
        </div>

        <div class="md-header__source">
          <a
            href="https://github.com/roshan-research/hazm"
            title="رفتن به مخزن"
            class="md-source"
            data-md-component="source"
          >
            <div class="md-source__icon md-icon">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512">
                <!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
                <path
                  d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"
                />
              </svg>
            </div>
            <div class="md-source__repository">hazm</div>
          </a>
        </div>
      </nav>
    </header>

    <div class="md-container" data-md-component="container">
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          <div
            class="md-sidebar md-sidebar--primary"
            data-md-component="sidebar"
            data-md-type="navigation"
          >
            <div class="md-sidebar__scrollwrap">
              <div class="md-sidebar__inner">
                <nav
                  class="md-nav md-nav--primary"
                  aria-label="هدایت"
                  data-md-level="0"
                >
                  <label class="md-nav__title" for="__drawer">
                    <a
                      href="../../index.html"
                      title="هضم | کتابخانهٔ پردازش زبان فارسی"
                      class="md-nav__button md-logo"
                      aria-label="هضم | کتابخانهٔ پردازش زبان فارسی"
                      data-md-component="logo"
                    >
                      <img src="../../assets/logo.svg" alt="logo" />
                    </a>
                    هضم | کتابخانهٔ پردازش زبان فارسی
                  </label>

                  <div class="md-nav__source">
                    <a
                      href="https://github.com/roshan-research/hazm"
                      title="رفتن به مخزن"
                      class="md-source"
                      data-md-component="source"
                    >
                      <div class="md-source__icon md-icon">
                        <svg
                          xmlns="http://www.w3.org/2000/svg"
                          viewBox="0 0 496 512"
                        >
                          <!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
                          <path
                            d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"
                          />
                        </svg>
                      </div>
                      <div class="md-source__repository">hazm</div>
                    </a>
                  </div>

                  <ul class="md-nav__list" data-md-scrollfix>
                    <li class="md-nav__item">
                      <a href="../../index.html" class="md-nav__link">
                        <span class="md-ellipsis"> معرفی و نصب </span>
                      </a>
                    </li>

                    <li
                      class="md-nav__item md-nav__item--pruned md-nav__item--nested"
                    >
                      <a href="../hazm/index.html" class="md-nav__link">
                        <span class="md-ellipsis"> کلاس‌ها و توابع </span>

                        <span class="md-nav__icon md-icon"></span>
                      </a>
                    </li>

                    <li
                      class="md-nav__item md-nav__item--active md-nav__item--nested"
                    >
                      <input
                        class="md-nav__toggle md-toggle"
                        type="checkbox"
                        id="__nav_3"
                        checked
                      />

                      <div class="md-nav__link md-nav__container">
                        <a href="index.html" class="md-nav__link">
                          <span class="md-ellipsis"> کاربردهای هضم </span>
                        </a>

                        <label class="md-nav__link" for="__nav_3">
                          <span class="md-nav__icon md-icon"></span>
                        </label>
                      </div>

                      <nav
                        class="md-nav"
                        data-md-level="1"
                        aria-labelledby="__nav_3_label"
                        aria-expanded="true"
                      >
                        <label class="md-nav__title" for="__nav_3">
                          <span class="md-nav__icon md-icon"></span>
                          کاربردهای هضم
                        </label>
                        <ul class="md-nav__list" data-md-scrollfix>
                          <li class="md-nav__item md-nav__item--active">
                            <input
                              class="md-nav__toggle md-toggle"
                              type="checkbox"
                              id="__toc"
                            />

                            <label
                              class="md-nav__link md-nav__link--active"
                              for="__toc"
                            >
                              <span class="md-ellipsis">
                                استخراج کلمات کلیدی
                              </span>

                              <span class="md-nav__icon md-icon"></span>
                            </label>

                            <a
                              href="keyword_extraction.html"
                              class="md-nav__link md-nav__link--active"
                            >
                              <span class="md-ellipsis">
                                استخراج کلمات کلیدی
                              </span>
                            </a>

                            <nav
                              class="md-nav md-nav--secondary"
                              aria-label="فهرست موضوعات"
                            >
                              <label class="md-nav__title" for="__toc">
                                <span class="md-nav__icon md-icon"></span>
                                فهرست موضوعات
                              </label>
                              <ul
                                class="md-nav__list"
                                data-md-component="toc"
                                data-md-scrollfix
                              >
                                <li class="md-nav__item">
                                  <a href="#_1" class="md-nav__link">
                                    نرمال‌سازی متن و استخراج توکن‌ها توسط هضم
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#pos" class="md-nav__link">
                                    استخراج تگ POS برای هر یک از کلمات
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#_2" class="md-nav__link">
                                    استخراج کاندیداها
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#sent2vec" class="md-nav__link">
                                    لودکردن مدل Sent2Vec
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#_3" class="md-nav__link">
                                    استخراج وکتور برای هر یک از کاندیداها و کل
                                    متن
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#_4" class="md-nav__link">
                                    یافتن شباهت کسینوسی کاندیداها و کل متن
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#_5" class="md-nav__link">
                                    یافتن شباهت کسینوسی کاندیداها به یکدیگر
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#_6" class="md-nav__link">
                                    نرمال‌سازی مقادیر مربوط به شباهت‌های کسینوسی
                                  </a>
                                </li>

                                <li class="md-nav__item">
                                  <a href="#_7" class="md-nav__link">
                                    استخراج کلمات کلیدی از روی شباهت‌های کسینوسی
                                  </a>
                                </li>
                              </ul>
                            </nav>
                          </li>
                        </ul>
                      </nav>
                    </li>

                    <li
                      class="md-nav__item md-nav__item--pruned md-nav__item--nested"
                    >
                      <a href="../in-other-languages.html" class="md-nav__link">
                        <span class="md-ellipsis"> سایر بخش‌ها </span>

                        <span class="md-nav__icon md-icon"></span>
                      </a>
                    </li>
                  </ul>
                </nav>
              </div>
            </div>
          </div>

          <div
            class="md-sidebar md-sidebar--secondary"
            data-md-component="sidebar"
            data-md-type="toc"
          >
            <div class="md-sidebar__scrollwrap">
              <div class="md-sidebar__inner">
                <nav
                  class="md-nav md-nav--secondary"
                  aria-label="فهرست موضوعات"
                >
                  <label class="md-nav__title" for="__toc">
                    <span class="md-nav__icon md-icon"></span>
                    فهرست موضوعات
                  </label>
                  <ul
                    class="md-nav__list"
                    data-md-component="toc"
                    data-md-scrollfix
                  >
                    <li class="md-nav__item">
                      <a href="#_1" class="md-nav__link">
                        نرمال‌سازی متن و استخراج توکن‌ها توسط هضم
                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#pos" class="md-nav__link">
                        استخراج تگ POS برای هر یک از کلمات
                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#_2" class="md-nav__link"> استخراج کاندیداها </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#sent2vec" class="md-nav__link">
                        لودکردن مدل Sent2Vec
                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#_3" class="md-nav__link">
                        استخراج وکتور برای هر یک از کاندیداها و کل متن
                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#_4" class="md-nav__link">
                        یافتن شباهت کسینوسی کاندیداها و کل متن
                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#_5" class="md-nav__link">
                        یافتن شباهت کسینوسی کاندیداها به یکدیگر
                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#_6" class="md-nav__link">
                        نرمال‌سازی مقادیر مربوط به شباهت‌های کسینوسی
                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="#_7" class="md-nav__link">
                        استخراج کلمات کلیدی از روی شباهت‌های کسینوسی
                      </a>
                    </li>
                  </ul>
                </nav>
              </div>
            </div>
          </div>

          <div class="md-content" data-md-component="content">
            <article class="md-content__inner md-typeset">
              <h1>استخراج کلمات کلیدی</h1>

              <p>
                وقتی در حال پیمایش لیست پیام‌ها، توییت‌ها، خبرها و ... هستید در
                واقع مشغول استخراج کلمات کلیدی هستید. شما براساس برخی از کلمات
                کلیدی تصمیم می‌گیرید که متنی را بخوانید یا نه. الگوریتم‌های
                استخراج کلمات کلیدی در NLP نیز هر کدام به روشی سعی دارند این
                رفتار انسان را تقلید کنند. استخراج کلمات کلیدی، رویکردی
                تحلیل‌گرانه برای شناسایی پرکاربردترین و ضروری‌ترین واژه‌ها و
                عباراتِ یک متن است. این کار برای شناسایی مفهوم اصلی متن ضروری
                است.
              </p>
              <p>
                در این مثال قصد داریم با کمک هضم و برخی از کتابخانه‌های پردازش
                زبان، کلمات کلیدی یک متن را استخراج کنیم. در تمام الگوریتم‌های
                استخراج کلمات کلیدی، ابتدا باید متن خام ورودی نرمال‌سازی،
                توکنایز و برچسب‌گذاری شود که انجام این کارها به سادگی توسط
                کتابخانهٔ هضم میسر است.
              </p>
              <p>
                الگوریتم‌های مختلفی برای استخراج کلمات کلیدی وجود دارد. ما در
                این مقاله از روش Text Rank استفاده کرده‌ایم. در روش Text Rank
                متن ورودی ابتدا به جملات و کلمات شکسته می‌شود و سپس گراف معنایی
                آن ایجاد می‌شود. در این گراف، هر کلمه یا جمله نقش یک گره را بازی
                می‌کند و یال‌های بین گره‌ها، روابط معنایی بین آن‌هاست. اهمیت هر
                گره به این صورت مشخص می‌شود که اگر گره‌ای (یعنی کلمه یا جمله‌ای)
                با کلمات و جملات همجوار، همبستگی بیشتری داشت اهمیت بیشتری دارد.
              </p>
              <p>بیایید جزئیات بیشتر را از طریق کد بررسی کنیم.</p>
              <div class="admonition info">
                <p>
                  <a
                    href="https://github.com/roshan-research/hazm/blob/master/samples/keyword_extraction.py"
                    >سورس این مثال</a
                  >
                </p>
              </div>
              <p>
                ابتدا آخرین نسخهٔ هضم و تمام کتابخانه‌هایی را که در مثال زیر
                ایمپورت شده‌اند نصب کنید.
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">pip</span> <span class="n">install</span> <span class="n">hazm</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">nltk</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">string</span>
<span class="kn">import</span> <span class="nn">warnings</span>
<span class="kn">import</span> <span class="nn">gensim</span>
<span class="kn">from</span> <span class="nn">sklearn.metrics.pairwise</span> <span class="kn">import</span> <span class="n">cosine_similarity</span>
<span class="kn">from</span> <span class="nn">configparser</span> <span class="kn">import</span> <span class="n">ConfigParser</span>
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">reduce</span>
<span class="kn">from</span> <span class="nn">gensim.models</span> <span class="kn">import</span> <span class="n">Doc2Vec</span>
<span class="kn">from</span> <span class="nn">hazm.Embedding</span> <span class="kn">import</span> <span class="n">SentEmbedding</span>
<span class="kn">from</span> <span class="nn">hazm</span> <span class="kn">import</span> <span class="o">*</span>
</code></pre>
              </div>
              <p>متنی را برای استخراج کلمات کلیدی آن در نظر بگیرید.</p>
              <div class="highlight">
                <pre><span></span><code><span class="n">text</span> <span class="o">=</span> <span class="s1">&#39;سفارت ایران در مادرید درباره فیلم منتشرشده از «حسن قشقاوی» در مراسم سال نو در کاخ سلطنتی اسپانیا و حاشیه‌سازی‌ها در فضای مجازی اعلام کرد: به تشریفات دربار کتباً اعلام شد سفیر بدون همراه در مراسم حضور خواهد داشت و همچون قبل به دلایل تشریفاتی نمی‌تواند با ملکه دست بدهد. همان‌گونه که کارشناس رسمی تشریفات در توضیحات خود به یک نشریه اسپانیایی گفت این موضوع توضیح مذهبی داشته و هرگز به معنی بی‌احترامی به مقام و شخصیت زن آن هم در سطح ملکه محترمه یک کشور نیست.&#39;</span>

<span class="n">keyword_count</span> <span class="o">=</span> <span class="mi">10</span>
</code></pre>
              </div>
              <h2 id="_1">
                نرمال‌سازی متن و استخراج توکن‌ها توسط هضم<a
                  class="headerlink"
                  href="#_1"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>
                متن ورودی را با کمک
                <a href="../hazm/normalizer.html">نرمالایزر هضم</a> نرمال‌سازی
                می‌کنیم و پس از آن با کمک توکنایزر به
                <a href="../hazm/sentence_tokenizer.html">جملات</a> و در نهایت
                به <a href="../hazm/word_tokenizer.html">کلمات</a> می‌شکنیم.
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">normalizer</span> <span class="o">=</span> <span class="n">Normalizer</span><span class="p">()</span>
<span class="n">normalize_text</span> <span class="o">=</span> <span class="n">normalizer</span><span class="o">.</span><span class="n">normalize</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="n">tokenize_text</span> <span class="o">=</span> <span class="p">[</span><span class="n">word_tokenize</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span> <span class="k">for</span> <span class="n">txt</span> <span class="ow">in</span> <span class="n">sent_tokenize</span><span class="p">(</span><span class="n">normalize_text</span><span class="p">)]</span>
<span class="n">tokenize_text</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>[[&#39;سفارت&#39;,
  &#39;ایران&#39;,
  &#39;در&#39;,
  &#39;مادرید&#39;,
  &#39;درباره&#39;,
  &#39;فیلم&#39;,
  &#39;منتشرشده&#39;,
  ...]]
</code></pre>
              </div>
              <h2 id="pos">
                استخراج تگ POS برای هر یک از کلمات<a
                  class="headerlink"
                  href="#pos"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>
                بعد از لودکردن مدل POS، هر یک از کلمات را با ماژول
                <a href="../hazm/pos_tagger.html">POSTagger</a> هضم برچسب‌گذاری
                می‌کنیم.
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">model_path</span> <span class="o">=</span> <span class="s1">&#39;pos_tagger.model&#39;</span>
<span class="n">tagger</span> <span class="o">=</span> <span class="n">POSTagger</span><span class="p">(</span><span class="n">model</span> <span class="o">=</span> <span class="n">model_path</span><span class="p">)</span>
<span class="n">token_tag_list</span> <span class="o">=</span> <span class="n">tagger</span><span class="o">.</span><span class="n">tag_sents</span><span class="p">(</span><span class="n">tokenize_text</span><span class="p">)</span>
<span class="n">token_tag_list</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>[[(&#39;سفارت&#39;, &#39;NOUN,EZ&#39;),
  (&#39;ایران&#39;, &#39;NOUN&#39;),
  (&#39;در&#39;, &#39;ADP&#39;),
  (&#39;مادرید&#39;, &#39;NOUN&#39;),
  (&#39;درباره&#39;, &#39;ADP,EZ&#39;),
  (&#39;فیلم&#39;, &#39;NOUN,EZ&#39;),
  (&#39;منتشرشده&#39;, &#39;ADJ&#39;),
  ...]]
</code></pre>
              </div>
              <h2 id="_2">
                استخراج کاندیداها<a
                  class="headerlink"
                  href="#_2"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>با استفاده از چند گرامر، کاندیداها را پیدا می‌کنیم.</p>
              <div class="highlight">
                <pre><span></span><code><span class="n">grammers</span> <span class="o">=</span> <span class="p">[</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">NP:</span>
<span class="sd">        {&lt;NOUN,EZ&gt;?&lt;NOUN.*&gt;}    # Noun(s) + Noun(optional)</span>

<span class="sd">&quot;&quot;&quot;</span><span class="p">,</span>

<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">NP:</span>
<span class="sd">        {&lt;NOUN.*&gt;&lt;ADJ.*&gt;?}    # Noun(s) + Adjective(optional)</span>

<span class="sd">&quot;&quot;&quot;</span>
<span class="p">]</span>
<span class="c1">## you can also add your own grammer to be extracted from the text...</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code><span class="k">def</span> <span class="nf">extract_candidates</span><span class="p">(</span><span class="n">tagged</span><span class="p">,</span> <span class="n">grammer</span><span class="p">):</span>
    <span class="n">keyphrase_candidate</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
    <span class="n">np_parser</span> <span class="o">=</span> <span class="n">nltk</span><span class="o">.</span><span class="n">RegexpParser</span><span class="p">(</span><span class="n">grammer</span><span class="p">)</span>
    <span class="n">trees</span> <span class="o">=</span> <span class="n">np_parser</span><span class="o">.</span><span class="n">parse_sents</span><span class="p">(</span><span class="n">tagged</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">tree</span> <span class="ow">in</span> <span class="n">trees</span><span class="p">:</span>
        <span class="k">for</span> <span class="n">subtree</span> <span class="ow">in</span> <span class="n">tree</span><span class="o">.</span><span class="n">subtrees</span><span class="p">(</span><span class="nb">filter</span><span class="o">=</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">label</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;NP&#39;</span><span class="p">):</span>  <span class="c1"># For each nounphrase</span>
            <span class="c1"># Concatenate the token with a space</span>
            <span class="n">keyphrase_candidate</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">word</span> <span class="k">for</span> <span class="n">word</span><span class="p">,</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">subtree</span><span class="o">.</span><span class="n">leaves</span><span class="p">()))</span>
    <span class="n">keyphrase_candidate</span> <span class="o">=</span> <span class="p">{</span><span class="n">kp</span> <span class="k">for</span> <span class="n">kp</span> <span class="ow">in</span> <span class="n">keyphrase_candidate</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">kp</span><span class="o">.</span><span class="n">split</span><span class="p">())</span> <span class="o">&lt;=</span> <span class="mi">5</span><span class="p">}</span>
    <span class="n">keyphrase_candidate</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">keyphrase_candidate</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">keyphrase_candidate</span>

<span class="n">all_candidates</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">grammer</span> <span class="ow">in</span> <span class="n">grammers</span><span class="p">:</span>
    <span class="n">all_candidates</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">extract_candidates</span><span class="p">(</span><span class="n">token_tag_list</span><span class="p">,</span> <span class="n">grammer</span><span class="p">))</span>


<span class="n">all_candidates</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">all_candidates</span><span class="p">))</span>


<span class="nb">print</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">all_candidates</span><span class="p">)))</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>[&#39;مقام&#39; &#39;توضیح&#39; &#39;اسپانیا&#39; &#39;ملکه محترمه&#39; &#39;توضیح مذهبی&#39; &#39;ملکه&#39;
 &#39;تشریفات دربار&#39; &#39;معنی بی‌احترامی&#39; &#39;توضیحات&#39; &#39;دلایل&#39; &#39;سفارت&#39; &#39;کشور&#39;
 &#39;فضای&#39; &#39;مراسم&#39; &#39;موضوع&#39; &#39;سفارت ایران&#39; &#39;حاشیه‌سازی‌ها&#39; &#39;ایران&#39;
 &#39;شخصیت زن&#39; &#39;بی‌احترامی&#39; &#39;سطح&#39; &#39;حضور&#39; &#39;سال نو&#39; &#39;دست&#39; &#39;دلایل تشریفاتی&#39;
 &#39;نشریه اسپانیایی&#39; &#39;سفیر&#39; &#39;حسن&#39; &#39;کارشناس رسمی&#39; &#39;فیلم&#39; &#39;کارشناس&#39;
 &#39;مراسم سال&#39; &#39;مادرید&#39; &#39;تشریفات&#39; &#39;کاخ&#39; &#39;معنی&#39; &#39;فیلم منتشرشده&#39; &#39;سطح ملکه&#39;
 &#39;کاخ سلطنتی&#39; &#39;همان‌گونه&#39; &#39;دربار&#39; &#39;اعلام&#39; &#39;زن&#39; &#39;حسن قشقاوی&#39; &#39;نشریه&#39;
 &#39;قشقاوی&#39; &#39;فضای مجازی&#39; &#39;همراه&#39; &#39;شخصیت&#39;]
</code></pre>
              </div>
              <h2 id="sent2vec">
                لودکردن مدل Sent2Vec<a
                  class="headerlink"
                  href="#sent2vec"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>مدل sent2vec را لود می‌کنیم.</p>
              <div class="highlight">
                <pre><span></span><code><span class="n">sent2vec_model_path</span> <span class="o">=</span> <span class="s1">&#39;sent2vec.model&#39;</span>
<span class="n">sent2vec_model</span> <span class="o">=</span> <span class="n">SentEmbedding</span><span class="p">(</span><span class="n">sent2vec_model_path</span><span class="p">)</span>
</code></pre>
              </div>
              <h2 id="_3">
                استخراج وکتور برای هر یک از کاندیداها و کل متن<a
                  class="headerlink"
                  href="#_3"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>
                با کمک مدلی که در مرحله قبل لود شد هر یک از کاندیداها را به
                وکتور متناظر تبدیل می‌کنیم و همانند آن یکبار هم با ترکیب تمام
                کاندیداهای یک وکتور، به عنوان وکتور نمایندهٔ متن تعیین می‌کنیم.
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">all_candidates_vectors</span> <span class="o">=</span> <span class="p">[</span><span class="n">sent2vec_model</span><span class="p">[</span><span class="n">candidate</span><span class="p">]</span> <span class="k">for</span> <span class="n">candidate</span> <span class="ow">in</span> <span class="n">all_candidates</span><span class="p">]</span>
<span class="n">all_candidates_vectors</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>[array([-0.01188162, -0.01629335, -0.02919522, -0.00783677, -0.00102758,
        -0.03208233, -0.01709846,  0.0117062 ,  0.03449516,  0.07738346,
        ...],dtype=float32),
 array([ 1.61259193e-02, -2.24474519e-02, -3.80111709e-02,  2.28938404e-02,
         1.09725883e-02,  3.17719281e-02,  6.31656572e-02,  8.05895310e-03,
        ...],dtype=float32)]
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code><span class="n">candidates_concatinate</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">all_candidates</span><span class="p">)</span>
<span class="n">whole_text_vector</span> <span class="o">=</span> <span class="n">sent2vec_model</span><span class="p">[</span><span class="n">candidates_concatinate</span><span class="p">]</span>
<span class="n">whole_text_vector</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>array([ 4.67376083e-01,  1.41185641e-01, -4.01345827e-02,  8.06454271e-02,
        2.87257284e-01, -1.73859105e-01,  2.10984781e-01, -4.19053972e-01,
        ...], dtype=float32)
</code></pre>
              </div>
              <h2 id="_4">
                یافتن شباهت کسینوسی کاندیداها و کل متن<a
                  class="headerlink"
                  href="#_4"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>
                شباهت کسینوسی بین هریک از کاندیداها و وکتور نمایندهٔ متن را
                محاسبه می‌کنیم.
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">candidates_sim_whole</span> <span class="o">=</span> <span class="n">cosine_similarity</span><span class="p">(</span><span class="n">all_candidates_vectors</span><span class="p">,</span> <span class="n">whole_text_vector</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
<span class="n">candidates_sim_whole</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>array([[ 1.19351953e-01,  1.23398483e-01,  1.25267982e-01,
         1.78353339e-02,  2.34080136e-01, -1.43648628e-02,
        ...]], dtype=float32)
</code></pre>
              </div>
              <h2 id="_5">
                یافتن شباهت کسینوسی کاندیداها به یکدیگر<a
                  class="headerlink"
                  href="#_5"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>
                ماتریسی ایجاد می‌کنیم که هر درایهٔ آن با اندیس آی و جی، بیانگر
                شباهت کسینوسی کاندیدای آی با کاندیدای جی است.
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">candidate_sim_candidate</span> <span class="o">=</span> <span class="n">cosine_similarity</span><span class="p">(</span><span class="n">all_candidates_vectors</span><span class="p">)</span>
<span class="n">candidate_sim_candidate</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>array([[0.9999997 , 0.14587443, 0.20270647, ..., 0.42830434, 0.27730745,
        0.30513293],
       [0.14587443, 0.9999996 , 0.10514447, ..., 0.48333895, 0.3179143 ,
        0.19037738],
       [0.20270647, 0.10514447, 1.        , ..., 0.47220594, 0.24125722,
        0.18565692],
       ...,
       [0.42830434, 0.48333895, 0.47220594, ..., 0.9999998 , 0.52577287,
        0.50683355],
       [0.27730745, 0.3179143 , 0.24125722, ..., 0.52577287, 0.99999964,
        0.40011758],
       [0.30513293, 0.19037738, 0.18565692, ..., 0.50683355, 0.40011758,
        0.9999996 ]], dtype=float32)
</code></pre>
              </div>
              <h2 id="_6">
                نرمال‌سازی مقادیر مربوط به شباهت‌های کسینوسی<a
                  class="headerlink"
                  href="#_6"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>
                دو مقدار بالا را برای استفاده در مراحل بعد نرمال‌سازی می‌کنیم.
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">candidates_sim_whole_norm</span> <span class="o">=</span> <span class="n">candidates_sim_whole</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">candidates_sim_whole</span><span class="p">)</span>
<span class="n">candidates_sim_whole_norm</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">+</span> <span class="p">(</span><span class="n">candidates_sim_whole_norm</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">average</span><span class="p">(</span><span class="n">candidates_sim_whole_norm</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">candidates_sim_whole_norm</span><span class="p">)</span>
<span class="n">candidates_sim_whole_norm</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>array([[ 0.9393711 ],
       [ 0.979393  ],
       [ 0.9978831 ],
       [-0.06467056],
       [ 2.0740807 ],
       ...], dtype=float32)
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code><span class="n">np</span><span class="o">.</span><span class="n">fill_diagonal</span><span class="p">(</span><span class="n">candidate_sim_candidate</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">NaN</span><span class="p">)</span>
<span class="n">candidate_sim_candidate_norm</span> <span class="o">=</span> <span class="n">candidate_sim_candidate</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">nanmax</span><span class="p">(</span><span class="n">candidate_sim_candidate</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="n">candidate_sim_candidate_norm</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">+</span> <span class="p">(</span><span class="n">candidate_sim_candidate_norm</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">nanmean</span><span class="p">(</span><span class="n">candidate_sim_candidate_norm</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">nanstd</span><span class="p">(</span><span class="n">candidate_sim_candidate_norm</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="n">candidate_sim_candidate_norm</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>array([[nan, -3.5498703e-01,  3.2357961e-02, ...,
         1.8948689e-01,  3.9502221e-01,  6.2098056e-01],
       [-5.2607918e-01,            nan, -7.2487104e-01, ...,
         4.3979204e-01,  6.8422610e-01, -9.5400155e-02],
       [-1.7625093e-02, -6.8133366e-01,            nan, ...,
         3.8915750e-01,  1.3827083e-01, -1.2486839e-01],
       ...,
       [ 2.0007110e+00,  2.3489289e+00,  2.1240823e+00, ...,
                   nan,  2.1646044e+00,  1.8801302e+00],
       [ 6.4980078e-01,  1.0234730e+00,  3.3157024e-01, ...,
         6.3278729e-01,            nan,  1.2139380e+00],
       [ 8.9874434e-01,  1.5904903e-03, -9.9972427e-02, ...,
         5.4664868e-01,  1.2696817e+00,nan]], dtype=float32)
</code></pre>
              </div>
              <h2 id="_7">
                استخراج کلمات کلیدی از روی شباهت‌های کسینوسی<a
                  class="headerlink"
                  href="#_7"
                  title="Permanent link"
                  >&para;</a
                >
              </h2>
              <p>
                با استفاده از روش امبدرنک در یک الگوریتم تکرارشونده، در هر مرحله
                با یک فرمول، یک کاندیدا به عنوان کلمهٔ کلیدی انتخاب می‌شود.
                کاندیدایی انتخاب می‌شود که در درجهٔ اول بیشترین شباهت را با کل
                متن دارد و در درجهٔ دوم کمترین شباهت را با کاندیداهای انتخاب‌شده
                دارد. میزان اثرگذاری این دو فاکتور را می‌توان با درنظرگرفتن
                عوامل مختلفی مثل طول و محتوای متن تغییر داد. (beta)
              </p>
              <div class="highlight">
                <pre><span></span><code><span class="n">beta</span> <span class="o">=</span> <span class="mf">0.82</span>
<span class="n">N</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">all_candidates</span><span class="p">),</span> <span class="n">keyword_count</span><span class="p">)</span>

<span class="n">selected_candidates</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">unselected_candidates</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">all_candidates</span><span class="p">))]</span>
<span class="n">best_candidate</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">candidates_sim_whole_norm</span><span class="p">)</span>
<span class="n">selected_candidates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">best_candidate</span><span class="p">)</span>
<span class="n">unselected_candidates</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">best_candidate</span><span class="p">)</span>


<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
    <span class="n">selected_vec</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">selected_candidates</span><span class="p">)</span>
    <span class="n">unselected_vec</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">unselected_candidates</span><span class="p">)</span>

    <span class="n">unselected_candidate_sim_whole_norm</span> <span class="o">=</span> <span class="n">candidates_sim_whole_norm</span><span class="p">[</span><span class="n">unselected_vec</span><span class="p">,</span> <span class="p">:]</span>

    <span class="n">dist_between</span> <span class="o">=</span> <span class="n">candidate_sim_candidate_norm</span><span class="p">[</span><span class="n">unselected_vec</span><span class="p">][:,</span> <span class="n">selected_vec</span><span class="p">]</span>

    <span class="k">if</span> <span class="n">dist_between</span><span class="o">.</span><span class="n">ndim</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
        <span class="n">dist_between</span> <span class="o">=</span> <span class="n">dist_between</span><span class="p">[:,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span>

    <span class="n">best_candidate</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">beta</span> <span class="o">*</span> <span class="n">unselected_candidate_sim_whole_norm</span> <span class="o">-</span> <span class="p">(</span><span class="mi">1</span> <span class="o">-</span> <span class="n">beta</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">dist_between</span><span class="p">,</span> <span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
    <span class="n">best_index</span> <span class="o">=</span> <span class="n">unselected_candidates</span><span class="p">[</span><span class="n">best_candidate</span><span class="p">]</span>
    <span class="n">selected_candidates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">best_index</span><span class="p">)</span>
    <span class="n">unselected_candidates</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">best_index</span><span class="p">)</span>
<span class="n">all_candidates</span><span class="p">[</span><span class="n">selected_candidates</span><span class="p">]</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
</code></pre>
              </div>
              <div class="highlight">
                <pre><span></span><code>[&#39;معنی بی‌احترامی&#39;,
 &#39;دلایل تشریفاتی&#39;,
 &#39;سطح ملکه&#39;,
 &#39;توضیح مذهبی&#39;,
 &#39;نشریه اسپانیایی&#39;,
 &#39;زن&#39;,
 &#39;مراسم سال&#39;,
 &#39;فیلم&#39;,
 &#39;کارشناس رسمی&#39;,
 &#39;کشور&#39;]
</code></pre>
              </div>
            </article>
          </div>
        </div>

        <button
          type="button"
          class="md-top md-icon"
          data-md-component="top"
          hidden
        >
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
            <path
              d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"
            />
          </svg>
          برگشت به بالا
        </button>
      </main>

      <footer class="md-footer">
        <div class="md-footer-meta md-typeset">
          <div class="md-footer-meta__inner md-grid">
            <div class="md-copyright">
              <div class="md-copyright__highlight">
                © کلیهٔ حقوق این سایت محفوظ و متعلق به شرکت روشن است.
                &nbsp;|&nbsp;
                <a href="#__consent">تغییر تنظیمات کوکی</a>
              </div>

              Made with
              <a
                href="https://squidfunk.github.io/mkdocs-material/"
                target="_blank"
                rel="noopener"
              >
                Material for MkDocs
              </a>
            </div>

            <div class="md-social">
              <a
                href="https://github.com/roshan-research"
                target="_blank"
                rel="noopener"
                title="github.com"
                class="md-social__link"
              >
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512">
                  <!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
                  <path
                    d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"
                  />
                </svg>
              </a>
            </div>
          </div>
        </div>
      </footer>
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>

    <div class="md-consent" data-md-component="consent" id="__consent" hidden>
      <div class="md-consent__overlay"></div>
      <aside class="md-consent__inner">
        <form class="md-consent__form md-grid md-typeset" name="consent">
          <h4>درخواست استفاده از کوکی</h4>
          <p>
            با پذیرش کوکی به ما اجازه می‌دهید تا با بررسی تعامل شما با سایت و
            شناسایی بازدیدهای بعدی‌‌تان، کیفیت مستندات را بهبود ببخشیم. <br />
            سپاس از همکاری شما. ❤️
          </p>
          <input class="md-toggle" type="checkbox" id="__settings" />
          <div class="md-consent__settings">
            <ul class="task-list">
              <li class="task-list-item">
                <label class="task-list-control">
                  <input type="checkbox" name="analytics" checked />
                  <span class="task-list-indicator"></span>
                  Google Analytics
                </label>
              </li>

              <li class="task-list-item">
                <label class="task-list-control">
                  <input type="checkbox" name="github" checked />
                  <span class="task-list-indicator"></span>
                  GitHub
                </label>
              </li>
            </ul>
          </div>
          <div class="md-consent__controls">
            <button class="md-button md-button--primary">تایید</button>

            <label class="md-button" for="__settings">مدیریت تنظیمات</label>
          </div>
        </form>
      </aside>
    </div>
    <script>
      var consent = __md_get("__consent");
      if (consent)
        for (var input of document.forms.consent.elements)
          input.name && (input.checked = consent[input.name] || !1);
      else
        "file:" !== location.protocol &&
          setTimeout(function () {
            document.querySelector("[data-md-component=consent]").hidden = !1;
          }, 250);
      var action,
        form = document.forms.consent;
      for (action of ["submit", "reset"])
        form.addEventListener(action, function (e) {
          if ((e.preventDefault(), "reset" === e.type))
            for (var n of document.forms.consent.elements)
              n.name && (n.checked = !1);
          __md_set(
            "__consent",
            Object.fromEntries(
              Array.from(new FormData(form).keys()).map(function (e) {
                return [e, !0];
              })
            )
          ),
            (location.hash = ""),
            location.reload();
        });
    </script>

    <script id="__config" type="application/json">
      {
        "base": "../..",
        "features": [
          "navigation.instant",
          "navigation.tracking",
          "navigation.tabs.sticky",
          "navigation.indexes",
          "navigation.prune",
          "navigation.top",
          "search.suggest",
          "search.highlight",
          "search.share",
          "content.tooltips",
          "content.code.annotate",
          "content.code.copy",
          "content.code.select"
        ],
        "search": "../../assets/javascripts/workers/search.dfff1995.min.js",
        "translations": {
          "clipboard.copied": "\u06a9\u067e\u06cc \u0634\u062f",
          "clipboard.copy": "\u06a9\u067e\u06cc \u06a9\u0631\u062f\u0646",
          "search.result.more.one": "1 \u0645\u0648\u0631\u062f \u062f\u06cc\u06af\u0631 \u062f\u0631 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647",
          "search.result.more.other": "# \u0645\u0648\u0631\u062f \u062f\u06cc\u06af\u0631 \u062f\u0631 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647",
          "search.result.none": "\u0633\u0646\u062f\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f",
          "search.result.one": "1 \u0633\u0646\u062f \u06cc\u0627\u0641\u062a \u0634\u062f",
          "search.result.other": "# \u0633\u0646\u062f \u06cc\u0627\u0641\u062a \u0634\u062f",
          "search.result.placeholder": "\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u062c\u0633\u062a\u062c\u0648 \u062a\u0627\u06cc\u067e \u06a9\u0646\u06cc\u062f",
          "search.result.term.missing": "\u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0633\u062a",
          "select.version": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0648\u06cc\u0631\u0627\u06cc\u0634"
        }
      }
    </script>

    <script src="../../assets/javascripts/bundle.78eede0e.min.js"></script>

    <script src="https://unpkg.com/mermaid@9.1.5/dist/mermaid.min.js"></script>

    <script>
      document$.subscribe(() => {
        const lightbox = GLightbox({
          touchNavigation: true,
          loop: false,
          zoomable: true,
          draggable: true,
          openEffect: "zoom",
          closeEffect: "zoom",
          slideEffect: "slide",
        });
      });
    </script>
  </body>
</html>
